项目名称
基于51单片机的掌上游戏机设计与实现

项目目标
	按时完成各里程碑点
	做好各阶段文档编写
	作好项目开发流水账
	满足项目性能要求
	平台拥有良好接口,方便二次开发
	平台拥有良好的扩展性,可不断升级,满足项目完成后未来1年功能需求
市场分析
	国内研究现状 目前国内游戏公司已达到了200多家，市场上运营的游戏亦达250多款，但与欧美、韩国等国家的游戏发展程度还有一定差距。我国有广阔的游戏市场，宽阔的发展空间，无限的继续挑战和剧增的玩家队伍。随着网络的兴起，巨大的市场需求量使中国在短短几年，已经从无到有，从陌生到熟悉，从掌握到运用。游戏必将成为网络竞争的主角，他的商业利益和商业价值无法估量。中国，人口众多的国家，随着人们生活水平的提高，温饱已经不是最终目的，我们寻求的是更加多姿多彩的生活，那么我们怎么能错过游戏这一最佳休闲娱乐项目呢？所以我国游戏发展前景一片大好，更应加大游戏开发力度！！
	潜在市场分析
	游戏玩家,怀旧党,单片机新手或电子爱好者
	竞争对手调查
	
*产品定位
	
功能需求
	基于裸平台单片机手持设备可完成以下功能
	简洁明了的开始的菜单
	简单易懂的游戏规则
	傻瓜式的操作
	游戏可玩性
	产品可扩展性,二次开发,学习接口
	
市场前景
	虽然用单片机来设计一个简单的俄罗斯方块游戏程序似乎有点大材小用了，但这仅仅是一个单片机在嵌入式游戏方面的简单应用，正因为他的前景无可预计，所以才有这个设计，此次设计仅仅是为了举一个单片机在游戏上应用的一个简单例子，他可以很好的说明单片机功能的强大，更高的可控性和高集成度的好处，因此它可以在电子游戏方面成为一个不可计量的明日之星.
	
项目风险评估
	课程安排及开发时间限制,个人可开发时间缺稀,加之开发人员不足,可能导致工期进展缓慢
	
软件设计流程图
	待添加
	
软件开发规则
	1.尽可能让变量使用占用代码空间最小的变量类型。例如无符号字符型和位操作（8051作为一款8位处理器提供了位操作支持，而且大多数操作指令都是8位或者位操作的通常用小的数据类型去编写代码其效率更高） 
	2.尽可能使用无符号类型数据（8051单片机不直接支持有符号的数据类型，有符号的操作需要额外的指令来支持，但是无符号的数据类型是直接就能被8051支持的）
	3.尽可能选择小的存储模式即small（绝大多数的应用采用small存储模式都能满足，也可以选择large存储模式，将一些数组和结构体存入xdata或者pdata存储空间的话选择极大存储模式，注意的是keil c51实时库使用的基本指针可以工作在任何存储模式）3.尽可能选择小的存储模式即small（绝大多数的应用采用small存储模式都能满足，也可以选择large存储模式，将一些数组和结构体存入xdata或者pdata存储空间的话选择极大存储模式，注意的是keil c51实时库使用的基本指针可以工作在任何存储模式）
	4.当应用其他存储模式的时候尽可能将变量存储在data区域内（将变量存储在data空间里，这部分空间单片机可以直接访问，据有最高的执行效率，通常这个区域存储的是最有效率的代码） 
	5.要知道如何在你的设备上使用PDATA存储模式（pdata提供的256字节的空间，使用MOVRi指令访问8位地址，pdata存储空间的使用不同于8051单片机内部的设备，需要设置页寄存器。Xdata 存储类型是通用的能达到的最大的存储空间64kb）
	6.尽可能使用内存类型的指针（默认的，keil c51编译器使用通用指针可以访问任何类型的内存空间，内存型的指针只能访问固定的存储空间，但是这种方式能够产生更快更小的程序代码） 

	6.尽可能使用内存类型的指针（默认的，keil c51编译器使用通用指针可以访问任何类型的内存空间，内存型的指针只能访问固定的存储空间，但是这种方式能够产生更快更小的程序代码） 
	7.减少使用重入函数（8051系列缺乏对堆栈变量的支持，重入函数的实现通过keil c51 编译器使用一个编译时间的堆栈对内存范围内的数据内容的覆盖实现的，重入函数在8051单片机上模拟出堆栈的结构。由于在嵌入式应用很少会用到重入函数代码，但是你在设计的过程中应尽可能的少用这种重入属性)	
	8.使用LX51 LinkerLocate 和Linker code packing来减少程序的体积。（LX51 LinkerLocate分析并且优化你的整个程序。代码将会在内存中重新排列，最大限度的使用2字节的AJMP和ACALL指令来代替3字节的LJMP和LCALL指令。Linker code packing利用通用代码段生成子程序） 
	9.尽量保持短的中断函数（结构好的的中断函数仅仅是执行数据的获取或者是计时，数据的处理是在主函数或者实时系统的任务函数中完成，这样可以有效的降低涉及保存/存储的中断函数的调用） 
	10.检查对于时钟周期的需求（代码访问数据需要一定的周期，尤其是在实时系统中使用多个线程或者中断服务程序中需要在主函数中）